// 约定data和params和headers都是对象
const itheima = function ({ method = 'get', url, data, params, headers }) {
  return new Promise((resolve, reject) => {
    const xhr = new XMLHttpRequest()
    // 拼接查询参数
    if (params) {
      url += '?' + Object.keys(params)
        .map((key) => `${key}=${params[key]}`)
        .join('&')
    }
    xhr.open(method, url)

    // 请求头信息
    if (headers) {
      for (const key in headers) {
        xhr.setRequestHeader(key, headers[key])
      }
    }

    // 不是get请求发送json字符串
    if (method.toLocaleLowerCase() === 'get') {
      xhr.send(null)
    } else {
      xhr.send(data ? JSON.stringify(data) : null)
    }

    // 成功
    // xhr.onload = () => {
    //   resolve(xhr.responseText ? JSON.parse(xhr.responseText) : null)
    // }

    // // 失败
    // xhr.onerror = () => {
    //   reject()
    // }

    // axios源码逻辑
    xhr.onloadend = () => {
      if (xhr.status >= 200 && xhr.status < 300) {
        resolve(xhr.responseText ? JSON.parse(xhr.responseText) : null)
      } else {
        reject(new Error('error :' + xhr.status))
      }
    }
  })
}
